//package com.fingard.dsp.bank.directbank.icbc02;
//
//import com.fingard.constant.Format;
//import com.fingard.dsp.bank.directbank.bankInterface.IElecBillTrans;
//import com.fingard.dsp.bank.reqrespobj.elecbilltrans.*;
//import com.fingard.dsp.bank.reqrespobj.elecbilltrans.detail.*;
//import com.fingard.io.FileHelper;
//import com.fingard.text.StringHelper;
//import com.fingard.util.DateHelper;
//import com.fingard.xml.XmlTextReader;
//import com.fingard.xml.XmlTextWriter;
//import com.sun.xml.internal.ws.message.StringHeader;
//
//import org.apache.commons.lang.StringUtils;
//
//import java.io.File;
//import java.math.BigDecimal;
//import java.util.Date;
//
///**
// * Created by austyn on 2017/11/13.
// */
//public class ICBC02ElecBillTrans extends ICBC02Base implements IElecBillTrans {
//
//    @Override
//    public RetAtsB003BillRespSubmit D_B003_BillResp_Submit(ReqB003BillRespSubmit query) throws Exception {
//        RetAtsB003BillRespSubmit retAts = new RetAtsB003BillRespSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//        while (query.readRecord()) {
//            RetAtsB003BillRespSubmitDetail tmpRetDetail = new RetAtsB003BillRespSubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = respType2TransCode(query.detail.respType);
//                if (bnkTransCode == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "不支持该应答类型";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                //当应答类型为 提示承兑签收、质押解除、保证签收、同意清偿签收时,发送报文为高级票据操作接口
//                if (bnkTransCode.equals("BSACPT") || bnkTransCode.equals("SIGNBPLED")
//                        ||bnkTransCode.equals("RELSIGNBP") || bnkTransCode.equals("BSGUAR") || bnkTransCode.equals("BSIGNASTL")) {
//                    sendOtherRetAtsB003BillRespSubmit(bnkTransCode, query, retAts);
//                    continue;
//                }
//                bnkfSeqno = bnkPackageID;
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("BillNo", query.detail.billNo);
//                xmlWriter.writeElementString("BillOpenName", query.detail.billOpenName);
//                xmlWriter.writeElementString("BillOpenAcc", query.detail.billOpenAcc);
//                xmlWriter.writeElementString("AccNo", query.detail.actNum);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                //2017-11-14    签收操作时,不能为空,B003目前都是签收操作
//                String signFlag = respFlag2SignFlag(query.detail.respFlag);
//                if (signFlag == null) {
//                    retAts.writeRespCode("-1");
//                    retAts.writeRespInfo("应答标记错误");
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("SignFlag", signFlag);
//                xmlWriter.writeElementString("Addr", query.detail.guarAddr);
//
//                //拒付理由代码，提示付款签收拒绝签收时必输，其他情况不输
//                if("6".equals(query.detail.respType)&&"2".equals(query.detail.respFlag)) {
//                    if(StringHelper.isNullOrEmpty(query.detail.unPayCode)){
//                        throw new Exception("提示付款拒付时，拒付理由不能为空！");
//                }
//                    if("99".equals(query.detail.unPayCode)){
//                        xmlWriter.writeElementString("RejectReason", "DC09");
//                xmlWriter.writeElementString("RejectRemark", query.detail.unPayMemo);
//                    }else{
//                        xmlWriter.writeElementString("RejectReason", "DC0" + (Integer.valueOf(query.detail.unPayCode) - 1));
//                        xmlWriter.writeElementString("RejectRemark", "");
//                    }
//                }else{
//                    xmlWriter.writeElementString("RejectReason", "");
//                    xmlWriter.writeElementString("RejectRemark","");
//                }
//                xmlWriter.writeElementString("SMSFlag", "");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                xmlWriter.writeElementString("ReqReserved1", "");
//                xmlWriter.writeElementString("ReqReserved2", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB003BillRespSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.respInfo = tmpRetMsg;
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    /**
//     * ats → bank
//     * 应答类型转交易代码
//     * 参考ats ReqB003Callback
//     *
//     * @param respType
//     * @return
//     */
//    private String respType2TransCode(String respType) {
//        if (StringHelper.isNullOrEmpty(respType)) {
//            return null;
//        }
//        int operateFlag = Integer.parseInt(respType);
//
//        switch (operateFlag) {
//            //提示承兑签收
//            case 1:
//                return "BSACPT";
//            //提示收票签收
//            case 2:
//                return "BSPCOL";
//            //背书转让签收
//            case 3:
//                return "BSENDO";
//            //回购式贴现赎回签收
//            case 4:
//                return "BSDISC";
//            //质押解除签收
//            case 5:
//                return "RELSIGNBP";
//            //提示付款签收
//            case 6:
//                return "BSPPAY";
//            //保证签收
//            case 7:
//                return "BSGUARBSGUAR";
//            //同意清偿签收
//            case 8:
//                return "BSIGNASTL";
//            case 9:
//                return "SIGNBPLED";
//        }
//        return null;
//    }
//
//    private void sendOtherRetAtsB003BillRespSubmit(String bnkTransCode, ReqB003BillRespSubmit query, RetAtsB003BillRespSubmit retAts) throws Exception {
//        RetAtsB003BillRespSubmitDetail tmpRetDetail = new RetAtsB003BillRespSubmitDetail();
//
//        bnkPackageID = query.reqHeader.transSeqID;
//        this.bnkTransCode = bnkTransCode;
//        bnkfSeqno = bnkPackageID;
//        bnkVersion = "0.0.1.0";
//        XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//        //写入ICBC02通用的头部节点
//        writeCommonHeader(xmlWriter);
//
//        xmlWriter.writeElementString("TotalNum", "1");
//        xmlWriter.writeElementString("TotalAmt", StringHelper.amountMultiply100(query.detail.billAmt));
//        xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//
//        xmlWriter.writeStartElement("rd");
//        xmlWriter.writeElementString("iSeqno", query.detail.reqSeqID);
//        xmlWriter.writeElementString("BillNo", query.detail.billNo);
//        xmlWriter.writeElementString("BillSerialNo", query.detail.busiNo);
//        xmlWriter.writeElementString("BillOpener", query.detail.billOpenName);
//        xmlWriter.writeElementString("BillOpenAcct", query.detail.billOpenAcc);
//        xmlWriter.writeElementString("Account", query.detail.actNum);
//        xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//        xmlWriter.writeElementString("IfDateHintTicket", "");
//        xmlWriter.writeElementString("HintTicketDate", "");
//        if("1".equals(query.detail.respFlag)) {
//            xmlWriter.writeElementString("SignResult", "SU00");
//        }else if("2".equals(query.detail.respFlag)){
//            xmlWriter.writeElementString("SignResult", "SU01");
//        }
//        xmlWriter.writeElementString("IfDatePayHint", "");
//        xmlWriter.writeElementString("PayHintDate", "");
//        xmlWriter.writeElementString("DrwguarntrAddress", "");
//        if("1".equals(query.detail.respType)) {
//            xmlWriter.writeElementString("AccptrCreditLV", query.detail.accpCredit);
//            xmlWriter.writeElementString("AccptrRateAgency", query.detail.accpGrade);
//            xmlWriter.writeElementString("AccptrRateMaturity", DateHelper.convertD10toD8(query.detail.accpGradeDue));
//        }else{
//        xmlWriter.writeElementString("AccptrCreditLV", "");
//        xmlWriter.writeElementString("AccptrRateAgency", "");
//        xmlWriter.writeElementString("AccptrRateMaturity", "");
//        }
//        xmlWriter.writeElementString("Notes", "");
//        xmlWriter.writeElementString("ProtestReason", "");
//        xmlWriter.writeElementString("ProtestNotes", "");
//        xmlWriter.writeElementString("ByResourcerName", "");
//        xmlWriter.writeElementString("ByResourcerAcct", "");
//        xmlWriter.writeElementString("ByResourcerBank", "");
//        xmlWriter.writeElementString("IfMessage", "");
//        xmlWriter.writeElementString("MessagRange", "");
//        xmlWriter.writeElementString("PhoneNOList", "");
//        xmlWriter.writeEndElement();
//
//        xmlWriter.writeEndDocument();
//        String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//        if (tmpStrRet[0].length() == 0) {
//            StringBuilder tmpSbMsg = new StringBuilder();
//            XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//            if (tmpBkReader != null) {
//                String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                if (isActiveRetCode(tmpRetCode)) {
//                    while (tmpBkReader.read("/CMS/eb/out/rd")) {
//                        setOtherRetAtsB003BillRespSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo);
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "0";
//                    tmpRetDetail.respInfo = tmpRetMsg;
//                    tmpRetDetail.transState = tmpRetCode;
//                    tmpRetDetail.payInfoCode = tmpRetCode;
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } else {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = tmpSbMsg.toString();
//                retAts.writeDetail(tmpRetDetail);
//            }
//        } else {
//            tmpRetDetail.respCode = "-1";
//            tmpRetDetail.respInfo = tmpStrRet[1];
//            retAts.writeDetail(tmpRetDetail);
//        }
//    }
//
//    /**
//     * 将元转分
//     *
//     * @param p_yuan
//     * @return
//     */
//    private String amountMultiply100(String p_yuan) {
//        if (StringHelper.isNullOrEmpty(p_yuan)) {
//            return null;
//        }
//        return StringHelper.amountMultiply100(p_yuan);
//    }
//
//    /**
//     * ats → bank
//     * ats 1-同意签收 2-拒绝签收
//     * bank SU00-同意签收 SU01-拒绝签收
//     *
//     * @param respFlag
//     * @return
//     */
//    private String respFlag2SignFlag(String respFlag) {
//        if (StringHelper.isNullOrEmpty(respFlag)) return null;
//        int signFlag = Integer.parseInt(respFlag);
//        switch (signFlag) {
//            case 1:
//                return "SU00";
//            case 2:
//                return "SU01";
//        }
//        return null;
//    }
//
//    /**
//     * ats → bank
//     * bank :
//     * DC00-与自己有直接债权债务关系的持票人未履行约定义务；
//     * DC01-持票人以欺诈、偷盗或者胁迫等手段取得票据；
//     * DC02-持票人明知有欺诈、偷盗或者胁迫等情形，出于恶意取得票据；
//     * DC03-持票人明知债务人与出票人或者持票人的前手之间存在抗辩事由而取得票据；
//     * DC04-持票人因重大过失取得不符合《票据法》规定的票据；
//     * DC05-超过提示付款期；
//     * DC06-被法院冻结或收到法院止付通知书；
//     * DC07-票据未到期；
//     * DC08-商业承兑汇票承兑人账户余额不足；
//     * DC09-其他（必须注明）
//     *
//     * @param unPayCode 拒付理由代码 ats : 1==DC00 2==DC01 N==DC0(N-1) 99==DC09
//     * @return
//     */
//    private String unPayCode2RejectReason(String unPayCode) {
//        if (StringHelper.isNullOrEmpty(unPayCode)) return null;
//        int code = Integer.parseInt(unPayCode);
//        switch (code) {
//            case 1:
//                return "DC00";
//            case 2:
//                return "DC01";
//            case 3:
//                return "DC02";
//            case 4:
//                return "DC03";
//            case 5:
//                return "DC04";
//            case 6:
//                return "DC05";
//            case 7:
//                return "DC06";
//            case 8:
//                return "DC07";
//            case 9:
//                return "DC08";
//            //其他拒付理由
//            case 99:
//                return "DC09";
//        }
//        return null;
//    }
//
//    private void setRetAtsB003BillRespSubmitDetail(ReqB003BillRespSubmit query,
//                                                   RetAtsB003BillRespSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                   String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    /**
//     * 提示承兑签收、质押解除、保证签收、清偿签收时，返回高级票据操作接口返回报文
//     *
//     * @param query
//     * @param tmpRetDetail
//     * @param tmpBkReader
//     * @throws Exception
//     */
//    private void setOtherRetAtsB003BillRespSubmitDetail(ReqB003BillRespSubmit query,
//                                                        RetAtsB003BillRespSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                        String serialNo) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = tmpBkReader.readedXElement.getSingleText("iRetMsg");
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = tmpBkReader.readedXElement.getSingleText("iRetCode");
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB101BillApplySubmit D_B101_BillResp_Submit(ReqB101BillApplySubmit query) throws Exception {
//        RetAtsB101BillApplySubmit retAts = new RetAtsB101BillApplySubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB101BillApplySubmitDetail tmpRetDetail = new RetAtsB101BillApplySubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = billType2TransCode(query.detail.billType);
//                if (bnkTransCode == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "票据类型错误";
//                    retAts.writeDetail(tmpRetDetail);
//                }
//                bnkfSeqno = bnkPackageID;
//                bnkVersion = "0.0.1.0";
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                String billType = reqReserved1ToBillType(query.detail.billType);
//                if (billType == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "票据类型错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("BillType", billType);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                xmlWriter.writeElementString("BillOpenDate", Format.Date8Format.format(Format.DateTimeFormat.parse(query.detail.issDate)));
//                xmlWriter.writeElementString("BillDueDate", Format.Date8Format.format(Format.DateTimeFormat.parse(query.detail.dueDate)));
//                String reciteFlag = transFlag2ReciteFlag(query.detail.transFlag);
//                if (reciteFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "背书转让标志错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("ReciteFlag", reciteFlag);
//                xmlWriter.writeElementString("AccNo", query.detail.drawAct);
//                xmlWriter.writeElementString("AccName", query.detail.drawName);
//                xmlWriter.writeElementString("AcceptBranch", "");
//                //出票方式  0-不选择 1-循环额度 2-质押
//                xmlWriter.writeElementString("TranType", "0");
//                xmlWriter.writeElementString("AgreeNo", "");
//                xmlWriter.writeElementString("RecAccName", query.detail.payeeName);
//                String sysFlag = accpSameBnk2SysFlag(query.detail.payeeSameBnk);
//                if (sysFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "收款人是否为工商银行标志错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("SysFlag", sysFlag);
//                xmlWriter.writeElementString("RecBankName", query.detail.payeeBnkName);
//                xmlWriter.writeElementString("RecCityName", query.detail.recCityName);
//                xmlWriter.writeElementString("RecBankNo", query.detail.payeeBnkCode);
//                xmlWriter.writeElementString("RecAccNo", query.detail.payeeAct);
//                //商承出票
//                if("AC02".equals(billType)) {
//                    xmlWriter.writeElementString("AccptFlag", "2");
//                }else{
//                    xmlWriter.writeElementString("AccptFlag", "");
//                }
//                xmlWriter.writeElementString("AccptrAccName", query.detail.accpName);
//                xmlWriter.writeElementString("AccptrAccNo", query.detail.accpAct);
//                xmlWriter.writeElementString("AccptrIsIcbc", IS_ICBC_MAP.getNotNull(query.detail.accpSameBnk));
//                xmlWriter.writeElementString("AccptrBankName", query.detail.accpBnkName);
//                xmlWriter.writeElementString("AccptrBankNo", query.detail.accpBnkCode);
//                xmlWriter.writeElementString("AccptrAddr", "");
////                xmlWriter.writeElementString("AccptFlag", "");
////                xmlWriter.writeElementString("AccptrAccName", "");
////                xmlWriter.writeElementString("AccptrAccNo", "");
////                xmlWriter.writeElementString("AccptrIsIcbc", "");
////                xmlWriter.writeElementString("AccptrBankName", "");
////                xmlWriter.writeElementString("AccptrBankNo", "");
////                xmlWriter.writeElementString("AccptrAddr", "");
//                if("AC02".equals(billType)) {
//                    xmlWriter.writeElementString("GuarntFlag", "0");
//                }else{
//                    xmlWriter.writeElementString("GuarntFlag", "");
//                }
//                xmlWriter.writeElementString("GuarntrAccName", "");
//                xmlWriter.writeElementString("GuarntrAccNo", "");
//                xmlWriter.writeElementString("GuarntrIsIcbc", "");
//                xmlWriter.writeElementString("GuarntrBankName", "");
//                xmlWriter.writeElementString("GuarntrBankNo", "");
//                xmlWriter.writeElementString("GuarntrAddr", "");
//                xmlWriter.writeElementString("AutoFlag", "0");
//                xmlWriter.writeElementString("SignFlag", "1");
//                xmlWriter.writeElementString("ContractNo", query.detail.contractNo);
//                xmlWriter.writeElementString("UseCN", "");
//                xmlWriter.writeElementString("RepayAcct", "");
//                xmlWriter.writeElementString("Remark", query.detail.memo);
//                xmlWriter.writeElementString("RefNo", "");
//                xmlWriter.writeElementString("FileName", "");
//                xmlWriter.writeElementString("FileSeq", "");
//                xmlWriter.writeElementString("SMSFlag", "");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                xmlWriter.writeElementString("ReqReserved1", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB101BillApplySubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            tmpRetDetail.respInfo = tmpRetMsg;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    /**
//     * ast → bank
//     * <p>
//     * ats : 1-银承 2-商承
//     * bank : BIBANK:银承出票   BICORP:商承出票
//     *
//     * @param billType
//     * @return
//     */
//    protected String billType2TransCode(String billType) {
//        if (StringHelper.isNullOrEmpty(billType)) return null;
//        if (billType.equals("1")) {
//            return "BIBANK";
//        }
//        if (billType.equals("2")) {
//            return "BICORP";
//        }
//        return null;
//    }
//
//    /**
//     * ast → bank
//     * <p>
//     * ats : 1-银承 2-商承
//     * bank : AC01 银承 	AC02 商承
//     *
//     * @param billType
//     * @return
//     */
//    protected String reqReserved1ToBillType(String billType) {
//        if (StringHelper.isNullOrEmpty(billType)) return null;
//        if (billType.equals("1")) {
//            return "AC01";
//        }
//        if (billType.equals("2")) {
//            return "AC02";
//        }
//        return null;
//    }
//
//    /**
//     * B101、B105、B106
//     * ats → bank 背书转让
//     * <p>
//     * ats 1-可再转让 0-不得转让
//     * bank EM00 可再转让 EM01 不再转让
//     *
//     * @param transFlag
//     * @return
//     */
//    protected String transFlag2ReciteFlag(String transFlag) {
//        if (StringHelper.isNullOrEmpty(transFlag)) return null;
//        if (transFlag.equals("1")) {
//            return "EM00";
//        }
//        if (transFlag.equals("2")) {
//            return "EM01";
//        }
//        return null;
//    }
//
//    /**
//     * ats → bank 是否同行标识
//     * ats : 2-跨行,1-同行
//     * bank : 是否为工行 1-是 0-否
//     *
//     * @param accpSameBnk
//     * @return
//     */
//    private String accpSameBnk2SysFlag(String accpSameBnk) {
//        if (StringHelper.isNullOrEmpty(accpSameBnk)) return null;
//        if (accpSameBnk.equals("1")) {
//            return "1";
//        }
//        if (accpSameBnk.equals("2")) {
//            return "0";
//        }
//        return null;
//    }
//
//    private void setRetAtsB101BillApplySubmitDetail(ReqB101BillApplySubmit query,
//                                                    RetAtsB101BillApplySubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                    String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB102BillAccpSubmit D_B102_BillResp_Submit(ReqB102BillAccpSubmit query) throws Exception {
//        RetAtsB102BillAccpSubmit retAts = new RetAtsB102BillAccpSubmit(query.reqHeader);
//        retAts.writeStart();
//
//        RetAtsB102BillAccpSubmitDetail tmpRetDetail = new RetAtsB102BillAccpSubmitDetail();
//        tmpRetDetail.respCode = "-1";
//        tmpRetDetail.respInfo = "工行电票提示承兑，在人行开票完成后由工行票据系统自动发起";
//        retAts.writeDetail(tmpRetDetail);
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    @Override
//    public RetAtsB103BillRetSubmit D_B103_BillResp_Submit(ReqB103BillRetSubmit query) throws Exception {
//        RetAtsB103BillRetSubmit retAts = new RetAtsB103BillRetSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB103BillRetSubmitDetail tmpRetDetail = new RetAtsB103BillRetSubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = "BCBILL";
//                bnkfSeqno = bnkPackageID;
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("BillNo", query.detail.billNo);
//                xmlWriter.writeElementString("BillOpenName", query.detail.billOpenName);
//                xmlWriter.writeElementString("BillOpenAcc", query.detail.billOpenAcc);
//                xmlWriter.writeElementString("AccNo", query.detail.actNum);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                xmlWriter.writeElementString("SignFlag", "");
//                xmlWriter.writeElementString("Addr", "");
//                xmlWriter.writeElementString("RejectReason", "");
//                xmlWriter.writeElementString("RejectRemark", query.detail.memo);
//                xmlWriter.writeElementString("SMSFlag", "");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                xmlWriter.writeElementString("ReqReserved1", "");
//                xmlWriter.writeElementString("ReqReserved2", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB103BillRetSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            tmpRetDetail.respInfo = tmpRetMsg;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    private void setRetAtsB103BillRetSubmitDetail(ReqB103BillRetSubmit query,
//                                                  RetAtsB103BillRetSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                  String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = "3001+" + tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB104BillReceSubmit D_B104_BillResp_Submit(ReqB104BillReceSubmit query) throws Exception {
//        RetAtsB104BillReceSubmit retAts = new RetAtsB104BillReceSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB104BillReceSubmitDetail tmpRetDetail = new RetAtsB104BillReceSubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = "BIPCOL";
//                bnkfSeqno = bnkPackageID;
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("BillNo", query.detail.billNo);
//                xmlWriter.writeElementString("BillOpenName", query.detail.billOpenName);
//                xmlWriter.writeElementString("BillOpenAcc", query.detail.billOpenAcc);
//                xmlWriter.writeElementString("AccNo", query.detail.actNum);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                xmlWriter.writeElementString("SignFlag", "");
//                xmlWriter.writeElementString("Addr", "");
//                xmlWriter.writeElementString("RejectReason", "");
//                xmlWriter.writeElementString("RejectRemark", query.detail.memo);
//                xmlWriter.writeElementString("SMSFlag", "");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                xmlWriter.writeElementString("ReqReserved1", "");
//                xmlWriter.writeElementString("ReqReserved2", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB104BillReceSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.respInfo = tmpBkReader.getSimpleText("RetMsg");
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    private void setRetAtsB104BillReceSubmitDetail(ReqB104BillReceSubmit query,
//                                                   RetAtsB104BillReceSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                   String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = "1003+" + tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB105BillEndoSubmit D_B105_BillResp_Submit(ReqB105BillEndoSubmit query) throws Exception {
//        RetAtsB105BillEndoSubmit retAts = new RetAtsB105BillEndoSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB105BillEndoSubmitDetail tmpRetDetail = new RetAtsB105BillEndoSubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = "BIENDO";
//                bnkfSeqno = bnkPackageID;
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("BillNo", query.detail.billNo);
//                xmlWriter.writeElementString("BillOpenName", query.detail.billOpenName);
//                xmlWriter.writeElementString("BillOpenAcc", query.detail.billOpenAcc);
//                xmlWriter.writeElementString("BillOpenBank", query.detail.billOpenBank);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                xmlWriter.writeElementString("AccNo", query.detail.actNum);
//                String sysFlag = accpSameBnk2SysFlag(query.detail.receSameBank);
//                if (sysFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "被背书人是否为工商银行标志错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("SysFlag", sysFlag);
//                xmlWriter.writeElementString("RecBankName", query.detail.receBnkName);
//                xmlWriter.writeElementString("RecCityName", query.detail.recCityName);
//                xmlWriter.writeElementString("RecBankNo", query.detail.receBnkCode);
//                xmlWriter.writeElementString("RecAccName", query.detail.receName);
//                xmlWriter.writeElementString("RecAccNo", query.detail.receAct);
//                String reciteFlag = transFlag2ReciteFlag(query.detail.transFlag);
//                if (reciteFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "背书转让标志错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("EndFlag", reciteFlag);
//                xmlWriter.writeElementString("SMSFlag", "");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                xmlWriter.writeElementString("ReqReserved1", "");
//                xmlWriter.writeElementString("ReqReserved2", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB105BillEndoSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.respInfo = tmpBkReader.getSimpleText("RetMsg");
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    private void setRetAtsB105BillEndoSubmitDetail(ReqB105BillEndoSubmit query,
//                                                   RetAtsB105BillEndoSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                   String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB106BillDiscSubmit D_B106_BillResp_Submit(ReqB106BillDiscSubmit query) throws Exception {
//        RetAtsB106BillDiscSubmit retAts = new RetAtsB106BillDiscSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB106BillDiscSubmitDetail tmpRetDetail = new RetAtsB106BillDiscSubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = "BIDISC";
//                bnkfSeqno = bnkPackageID;
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("BillNo", query.detail.billNo);
//                xmlWriter.writeElementString("BillOpenName", query.detail.billOpenName);
//                xmlWriter.writeElementString("BillOpenAcc", query.detail.billOpenAcc);
//                //该字段作为入账行号
//                xmlWriter.writeElementString("AccNo", query.detail.actedAct);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                String sysFlag = accpSameBnk2SysFlag(query.detail.receSameBnk);
//                if (sysFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "是否为工商银行标志错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("SysFlag", sysFlag);
//                xmlWriter.writeElementString("RecBankName", query.detail.receBnkName);
//                xmlWriter.writeElementString("RecCityName", query.detail.recCityName);
//                /*xmlWriter.writeElementString("RecBankNo", query.detail.ReceBnkCode);*/
//                if("1".equals(query.detail.receSameBnk)&&query.detail.receBnkCode.length()==12){
//                    String recBankNo = getElecBillBranchConfig().getMapValueByKey("RecBankNo",query.detail.receBnkCode);
//                    if(StringHelper.isNullOrEmpty(recBankNo)){
//                        throw new Exception("开户行:["+recBankNo+"]没有找到对应的8位联行号，请核查配置文件.");
//                    }
//                    xmlWriter.writeElementString("RecBankNo", recBankNo);
////                    xmlWriter.writeElementString("RecBankNo", query.detail.dircReceBnkCode);
////                    xmlWriter.writeElementString("RecBankNo", "");
//                }else {
//                    xmlWriter.writeElementString("RecBankNo", query.detail.receBnkCode);
//                }
////                xmlWriter.writeElementString("RecBankNo", query.detail.receBnkCode);
//                String tranType = discType2TranType(query.detail.discType);
//                if (tranType == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "贴现种类错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("TranType", tranType);
//                String onlineFlag = payType2OnlineFlag(query.detail.payType);
//                if (onlineFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "线上清算标识错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("OnlineFlag", onlineFlag);
//                String banFlag = transFlag2ReciteFlag(query.detail.transFlag);
//                if (banFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "背书转让标志错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("BanFlag", banFlag);
//                //要与中行统一利率ats输入方式。实际应*0.01
//                xmlWriter.writeElementString("TranRate", new BigDecimal(query.detail.discRate).multiply(new BigDecimal("0.01")).toPlainString());
//                // yyyy-MM-dd 转为 YYYYMMDD
//                if("RM01".equals(tranType)) {
//                    xmlWriter.writeElementString("RedeemOpenDate", Format.Date8Format.format(Format.Date10Format.parse(query.detail.repOpenDate)));
//                    xmlWriter.writeElementString("RedeemEndDate", Format.Date8Format.format(Format.Date10Format.parse(query.detail.repDueDate)));
//                    xmlWriter.writeElementString("RedeemRate", new BigDecimal(query.detail.repRate).multiply(new BigDecimal("0.01")).toPlainString());
//                }else{
//                    xmlWriter.writeElementString("RedeemOpenDate","" );
//                    xmlWriter.writeElementString("RedeemEndDate", "");
//                    xmlWriter.writeElementString("RedeemRate", "");
//                }
//                xmlWriter.writeElementString("SMSFlag", "");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                // 交易合同号|发票编号
//
//                String reqReserved1DefaultValue = getBankConfig().getValueAsString("ReqReserved1DefaultValue");
//                if(StringHelper.isNullOrEmpty(reqReserved1DefaultValue)){
//                    reqReserved1DefaultValue = "00000000";
//                }
//                xmlWriter.writeElementString("ReqReserved1", (StringHelper.isNullOrEmpty(query.detail.contractNo)?reqReserved1DefaultValue:query.detail.contractNo)+
//                        "|"+(StringHelper.isNullOrEmpty(query.detail.invoiceNo)?reqReserved1DefaultValue:query.detail.invoiceNo));
//                xmlWriter.writeElementString("ReqReserved2", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB106BillDiscSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            tmpRetDetail.respInfo = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    @Override
//    public RetAtsB107BillPledSubmit D_B107_BillResp_Submit(ReqB107BillPledSubmit query) throws Exception {
//        RetAtsB107BillPledSubmit retAts = new RetAtsB107BillPledSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        bnkPackageID = query.reqHeader.transSeqID;
//        bnkTransCode = "BIMPAWN";
//        bnkfSeqno = bnkPackageID;
//        bnkVersion = "0.0.1.0";
//        XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//        //写入ICBC02通用的头部节点
//        writeCommonHeader(xmlWriter);
//
//
//        RetAtsB107BillPledSubmitDetail tmpRetDetail = new RetAtsB107BillPledSubmitDetail();
//        while (query.readRecord()) {
//            xmlWriter.writeElementString("TotalNum", "1");
//            //注意一下这里
//            xmlWriter.writeElementString("TotalAmt", amountMultiply100(query.detail.billAmt));
//            xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//
//            tmpRetDetail = new RetAtsB107BillPledSubmitDetail();
//            String pawneeType = receSameBank2PawneeType(query.detail.receSameBnk);
//            if (pawneeType == null) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = "质权人类别标识错误";
//                retAts.writeDetail(tmpRetDetail);
//                continue;
//            }
//            String pawneeIfICBC = accpSameBnk2SysFlag(query.detail.receSameBnk);
//            if (pawneeIfICBC == null) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = "质权人账号是否为工商银行标识错误";
//                retAts.writeDetail(tmpRetDetail);
//                continue;
//            }
//
//            xmlWriter.writeStartElement("rd");
//            xmlWriter.writeElementString("iSeqno", query.detail.reqSeqID);
//            xmlWriter.writeElementString("BillNo", query.detail.billNo);
//            xmlWriter.writeElementString("BillOpener", query.detail.billOpenName);
//            xmlWriter.writeElementString("BillOpenAcct", query.detail.billOpenAcc);
//            xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//            xmlWriter.writeElementString("BillHoldAcct", query.detail.actNum);
//            if("0".equals(query.detail.receAct)){
//                if("1".equals(query.detail.receSameBnk)){
//                    pawneeType ="1";
//                }else{
//                    pawneeType ="0";
//                }
//            }else{
//                pawneeType="2";
//            }
//            xmlWriter.writeElementString("PawneeType", pawneeType);
//            xmlWriter.writeElementString("Pawnee", query.detail.receName);
//            if("2".equals(pawneeType)) {
//            xmlWriter.writeElementString("PawneeAcct", query.detail.receAct);
//            xmlWriter.writeElementString("PawneeIfICBC", pawneeIfICBC);
//                if("1".equals(pawneeIfICBC)){
//                    xmlWriter.writeElementString("PawneeBankCode", "");
//                }else{
//            xmlWriter.writeElementString("PawneeBankCode", query.detail.receBnkCode);
//                }
//            }else{
//                xmlWriter.writeElementString("PawneeAcct", "");
//                xmlWriter.writeElementString("PawneeIfICBC", "");
//                xmlWriter.writeElementString("PawneeBankCode", query.detail.receBnkCode);
//            }
//            //是否质押解除自动签收
//            xmlWriter.writeElementString("AutoReleaseFlag", "0");
//            xmlWriter.writeElementString("Notes", query.detail.memo);
//            xmlWriter.writeElementString("IfMessage", "");
//            xmlWriter.writeElementString("MessagRange", "");
//            xmlWriter.writeElementString("PhoneNOList", "");
//            xmlWriter.writeEndElement();
//        }
//
//        xmlWriter.writeEndDocument();
//        String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//        if (tmpStrRet[0].length() == 0) {
//            StringBuilder tmpSbMsg = new StringBuilder();
//            XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//            if (tmpBkReader != null) {
//                String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                if (isActiveRetCode(tmpRetCode)) {
//                    while (tmpBkReader.read("/CMS/eb/out/rd")) {
//                        setRetAtsB107BillPledSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo);
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "0";
//                    tmpRetDetail.transState = tmpRetCode;
//                    tmpRetDetail.payInfoCode = tmpRetCode;
//                    tmpRetDetail.respInfo = tmpBkReader.getSimpleText("RetMsg");
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } else {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = tmpSbMsg.toString();
//                retAts.writeDetail(tmpRetDetail);
//            }
//        } else {
//            tmpRetDetail.respCode = "-1";
//            tmpRetDetail.respInfo = tmpStrRet[1];
//            retAts.writeDetail(tmpRetDetail);
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    /**
//     * 质权人类别
//     * <p>
//     * ats : 1-同行 2-不同行
//     * bank : 1-工商银行网点 0-其他银行网点 2-其他
//     *
//     * @param receSameBank
//     */
//    private String receSameBank2PawneeType(String receSameBank) {
//        if (receSameBank == null) return null;
//        if (receSameBank.equals("1")) {
//            return "1";
//        }
//        if (receSameBank.equals("2")) {
//            return "0";
//        }
//        return null;
//    }
//
//    private void setRetAtsB107BillPledSubmitDetail(ReqB107BillPledSubmit query,
//                                                   RetAtsB107BillPledSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                   String serialNo) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = tmpBkReader.readedXElement.getSingleText("iRetMsg");
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = tmpBkReader.readedXElement.getSingleText("iRetCode");
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB108BillPaySubmit D_B108_BillResp_Submit(ReqB108BillPaySubmit query) throws Exception {
//        RetAtsB108BillPaySubmit retAts = new RetAtsB108BillPaySubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB108BillPaySubmitDetail tmpRetDetail = new RetAtsB108BillPaySubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = "BIPPAY";
//                bnkfSeqno = bnkPackageID;
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("BillNo", query.detail.billNo);
//                xmlWriter.writeElementString("BillOpenName", query.detail.billOpenName);
//                xmlWriter.writeElementString("BillOpenAcc", query.detail.billOpenAcc);
//                xmlWriter.writeElementString("AccNo", query.detail.actNum);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                xmlWriter.writeElementString("DueFlag", "");
//                xmlWriter.writeElementString("ValueDate", "");
//                String onlineFlag = payType2OnlineFlag(query.detail.payType);
//                if (onlineFlag == null) {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "线上清算标志错误";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                xmlWriter.writeElementString("OnlineFlag", onlineFlag);
//                xmlWriter.writeElementString("Reason", query.detail.overDueRea);
//                xmlWriter.writeElementString("SMSFlag", "0");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                xmlWriter.writeElementString("ReqReserved1", "");
//                xmlWriter.writeElementString("ReqReserved2", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true); //需要进行签名
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB108BillPaySubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.respInfo = tmpRetMsg;
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    private void setRetAtsB108BillPaySubmitDetail(ReqB108BillPaySubmit query,
//                                                  RetAtsB108BillPaySubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                  String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB109BillGuarSubmit D_B109_BillResp_Submit(ReqB109BillGuarSubmit query) throws Exception {
//        RetAtsB109BillGuarSubmit retAts = new RetAtsB109BillGuarSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        String NextTag = "1";
//        while (query.readRecord()) {
//            RetAtsB109BillGuarSubmitDetail tmpRetDetail = new RetAtsB109BillGuarSubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = "BMSNETINF";
//                bnkfSeqno = bnkPackageID;
//                bnkVersion = "0.0.1.0";
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("NextTag", NextTag);
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString());
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.respInfo = tmpBkReader.getSimpleText("RetMsg");
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    @Override
//    public RetAtsB110BillRecoSubmit D_B110_BillResp_Submit(ReqB110BillRecoSubmit query) throws Exception {
//        RetAtsB110BillRecoSubmit retAts = new RetAtsB110BillRecoSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB110BillRecoSubmitDetail tmpRetDetail = new RetAtsB110BillRecoSubmitDetail();
//
//            bnkPackageID = query.reqHeader.transSeqID;
//            bnkTransCode = "BRECOURSE";
//            bnkfSeqno = bnkPackageID;
//            bnkVersion = "0.0.1.0";
//            XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//            //写入ICBC02通用的头部节点
//            writeCommonHeader(xmlWriter);
//
//            xmlWriter.writeElementString("TotalNum", "1");
//            xmlWriter.writeElementString("TotalAmt", amountMultiply100(query.detail.billAmt));
//            xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//
//            String recourseType = recourseType2GetType(query.detail.recourseType);
//            if (recourseType == null) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = "追索类型错误";
//                retAts.writeDetail(tmpRetDetail);
//                continue;
//            }
//            String getReason = query.detail.recourseCode;
//            //追索类型为非拒付追索 RT01,必输
//            if (recourseType.equals("RT01") && recourseCode2GetReason(getReason) == null) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = "追索理由代码错误";
//                retAts.writeDetail(tmpRetDetail);
//                continue;
//            }
//
//            xmlWriter.writeStartElement("rd");
//            xmlWriter.writeElementString("iSeqno", query.detail.reqSeqID);
//            xmlWriter.writeElementString("BillNo", query.detail.billNo);
//            xmlWriter.writeElementString("BillOpener", query.detail.billOpenName);
//            xmlWriter.writeElementString("BillOpenAcct", query.detail.billOpenAcc);
//            xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//            xmlWriter.writeElementString("BillHoldAcct", query.detail.actNum);
//            xmlWriter.writeElementString("GetType", recourseType);
//            if(recourseType.equals("RT01")) {
//                xmlWriter.writeElementString("GetReason", recourseCode2GetReason(getReason));
//            }else{
//                xmlWriter.writeElementString("GetReason", "");
//            }
//            xmlWriter.writeElementString("ByRecourseName", query.detail.receName);
//            xmlWriter.writeElementString("ByRecourseAcct", query.detail.receAct);
//            xmlWriter.writeElementString("ByRecourseBank", query.detail.receBnkCode);
//            //保存被追索人的信息
//            String receourseDir = getBankConfig().getValueAsString("ByRecourse");
//            String filename = receourseDir+ File.separator+query.detail.billNo+"_"+query.detail.receAct+"_"+query.detail.receName
//                    +"_"+query.detail.receBnkCode;
//            if(!new File(filename).exists()){
//                FileHelper.writeFile(filename,"",getCharset());
//            }
//            xmlWriter.writeElementString("Notes", query.detail.memo);
//            xmlWriter.writeElementString("IfMessage", "");
//            xmlWriter.writeElementString("MessagRange", "");
//            xmlWriter.writeElementString("PhoneNOList", "");
//            xmlWriter.writeEndElement();
//
//            xmlWriter.writeEndDocument();
//            String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//            if (tmpStrRet[0].length() == 0) {
//                StringBuilder tmpSbMsg = new StringBuilder();
//                XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                if (tmpBkReader != null) {
//                    String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                    String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                    String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                    if (isActiveRetCode(tmpRetCode)) {
//                        while (tmpBkReader.read("/CMS/eb/out/rd")) {
//                            setRetAtsB110BillRecoSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo);
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "0";
//                        tmpRetDetail.respInfo = tmpRetMsg;
//                        tmpRetDetail.transState = tmpRetCode;
//                        tmpRetDetail.payInfoCode = tmpRetCode;
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpSbMsg.toString();
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } else {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = tmpStrRet[1];
//                retAts.writeDetail(tmpRetDetail);
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    /**
//     * ats → bank
//     * ats : 1-拒付追索 2-非拒付追索
//     * bank : RT00-拒付追索 RT01-非拒付追索
//     *
//     * @param recourseType
//     * @return
//     */
//    private String recourseType2GetType(String recourseType) {
//        if (StringHelper.isNullOrEmpty(recourseType)) return null;
//        if (recourseType.equals("1")) {
//            return "RT00";
//        }
//        if (recourseType.equals("2")) {
//            return "RT01";
//        }
//        return null;
//    }
//
//    /**
//     * ats → bank
//     * ats : 追索理由代码（非拒付时） 1-承兑人被依法宣告破产 2-承兑人因违法被责令终止活动
//     * bank : RC00-承兑人被依法宣告破产 RC01-承兑人因违法被责令终止活动
//     *
//     * @param recourseCode
//     * @return
//     */
//    private String recourseCode2GetReason(String recourseCode) {
//        if (StringHelper.isNullOrEmpty(recourseCode)) return null;
//        if (recourseCode.equals("1")) {
//            return "RC00";
//        }
//        if (recourseCode.equals("2")) {
//            return "RC01";
//        }
//        return null;
//    }
//
//    private void setRetAtsB110BillRecoSubmitDetail(ReqB110BillRecoSubmit query,
//                                                   RetAtsB110BillRecoSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                   String serialNo) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = tmpBkReader.readedXElement.getSingleText("iRetMsg");
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = tmpBkReader.readedXElement.getSingleText("iRetCode");
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB111BillAgreeSubmit D_B111_BillResp_Submit(ReqB111BillAgreeSubmit query) throws Exception {
//        RetAtsB111BillAgreeSubmit retAts = new RetAtsB111BillAgreeSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        bnkPackageID = query.reqHeader.transSeqID;
//        bnkTransCode = "BAGRSTLM";
//        bnkfSeqno = bnkPackageID;
//        bnkVersion = "0.0.1.0";
//
//        while (query.readRecord()) {
//            RetAtsB111BillAgreeSubmitDetail tmpRetDetail = new RetAtsB111BillAgreeSubmitDetail();
//            XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//            //写入ICBC02通用的头部节点
//            writeCommonHeader(xmlWriter);
//
//            xmlWriter.writeElementString("TotalNum", "1");
//            xmlWriter.writeElementString("TotalAmt", amountMultiply100(query.detail.agreeAmt));
//            xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//            xmlWriter.writeStartElement("rd");
//            xmlWriter.writeElementString("iSeqno", query.detail.reqSeqID);
//            xmlWriter.writeElementString("BillNo", query.detail.billNo);
//            xmlWriter.writeElementString("BillSerialNo", query.detail.busiNo);
//            xmlWriter.writeElementString("BillOpener", query.detail.billOpenName);
//            xmlWriter.writeElementString("BillOpenAcct", query.detail.billOpenAcc);
//            xmlWriter.writeElementString("Account", query.detail.actNum);
//            xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.agreeAmt));
//            xmlWriter.writeElementString("IfDateHintTicket", "");
//            xmlWriter.writeElementString("HintTicketDate", "");
//            xmlWriter.writeElementString("SignResult", "");
//            xmlWriter.writeElementString("IfDatePayHint", "");
//            xmlWriter.writeElementString("PayHintDate", "");
//            xmlWriter.writeElementString("DrwguarntrAddress", "");
//            xmlWriter.writeElementString("AccptrCreditLV", "");
//            xmlWriter.writeElementString("AccptrRateAgency", "");
//            xmlWriter.writeElementString("AccptrRateMaturity", "");
//            xmlWriter.writeElementString("Notes", query.detail.memo);
//            xmlWriter.writeElementString("ProtestReason", "");
//            xmlWriter.writeElementString("ProtestNotes", "");
//            xmlWriter.writeElementString("ByResourcerName", "");
//            xmlWriter.writeElementString("ByResourcerAcct", "");
//            xmlWriter.writeElementString("ByResourcerBank", "");
//            xmlWriter.writeElementString("IfMessage", "");
//            xmlWriter.writeElementString("MessagRange", "");
//            xmlWriter.writeElementString("PhoneNOList", "");
//            xmlWriter.writeEndElement();
//
//            xmlWriter.writeEndDocument();
//            String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(),true);
//            if (tmpStrRet[0].length() == 0) {
//                StringBuilder tmpSbMsg = new StringBuilder();
//                XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                if (tmpBkReader != null) {
//                    String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                    String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                    if (isActiveRetCode(tmpRetCode)) {
//                        while (tmpBkReader.read("/CMS/eb/out/rd")) {
//                            setRetAtsB111BillAgreeSubmit(query, tmpRetDetail, tmpBkReader, tmpSerialNo);
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "0";
//                        tmpRetDetail.respInfo = tmpBkReader.getSimpleText("RetMsg");
//                        tmpRetDetail.transState = tmpRetCode;
//                        tmpRetDetail.payInfoCode = tmpRetCode;
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpSbMsg.toString();
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } else {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = tmpStrRet[1];
//                retAts.writeDetail(tmpRetDetail);
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    private void setRetAtsB111BillAgreeSubmit(ReqB111BillAgreeSubmit query,
//                                              RetAtsB111BillAgreeSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                              String serialNo) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = tmpBkReader.readedXElement.getSingleText("iRetMsg");
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = tmpBkReader.readedXElement.getSingleText("iRetCode");
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    @Override
//    public RetAtsB112BillCancSubmit D_B112_BillResp_Submit(ReqB112BillCancSubmit query) throws Exception {
//        RetAtsB112BillCancSubmit retAts = new RetAtsB112BillCancSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//
//        while (query.readRecord()) {
//            RetAtsB112BillCancSubmitDetail tmpRetDetail = new RetAtsB112BillCancSubmitDetail();
//            try {
//                bnkPackageID = query.reqHeader.transSeqID;
//                bnkTransCode = B112ConvertOperateFlag(query.detail.cancelType);
//                if (bnkTransCode == null) {
//                    if (query.detail.cancelType.equals("1")) {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = "工商银行由票据系统自动发起提示承兑，不提供提示承兑撤回";
//                        retAts.writeDetail(tmpRetDetail);
//                        continue;
//                    }
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = "系统不支持该撤回类型";
//                    retAts.writeDetail(tmpRetDetail);
//                    continue;
//                }
//                /**
//                 * 质押撤回、追索通知撤回、同意清偿撤回时
//                 */
//                if (bnkTransCode.equals("WDBPLED") || bnkTransCode.equals("WDBRECOU") || bnkTransCode.equals("RELBAST")||bnkTransCode.equals("RELWBPLE")) {
//                    sendOtherD_B112_BillResp_Submit(bnkTransCode, query, retAts);
//                    continue;
//                }
//                bnkfSeqno = bnkPackageID;
//                bnkVersion = "0.0.0.1";
//                XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                //写入ICBC02通用的头部节点
//                writeCommonHeader(xmlWriter);
//
//                xmlWriter.writeElementString("BillNo", query.detail.billNo);
//                xmlWriter.writeElementString("BillOpenName", query.detail.billOpenName);
//                xmlWriter.writeElementString("BillOpenAcc", query.detail.billOpenAcc);
//                xmlWriter.writeElementString("AccNo", query.detail.actNum);
//                xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//                xmlWriter.writeElementString("SignFlag", "");
//                xmlWriter.writeElementString("Addr", "");
//                xmlWriter.writeElementString("RejectReason", "");
//                xmlWriter.writeElementString("RejectRemark", "");
//                xmlWriter.writeElementString("SMSFlag", "");
//                xmlWriter.writeElementString("RecList", "");
//                xmlWriter.writeElementString("PhoneList", "");
//                xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//                xmlWriter.writeElementString("ReqReserved1", "");
//                xmlWriter.writeElementString("ReqReserved2", "");
//
//                xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//                if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out")) {
//                                setRetAtsB112BillCancSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo, tmpRetCode, tmpRetMsg);
//                                retAts.writeDetail(tmpRetDetail);
//                            }
//                        } else {
//                            tmpRetDetail.respCode = "0";
//                            tmpRetDetail.respInfo = tmpRetMsg;
//                            tmpRetDetail.transState = tmpRetCode;
//                            tmpRetDetail.payInfoCode = tmpRetCode;
//                            retAts.writeDetail(tmpRetDetail);
//                        }
//                    } else {
//                        tmpRetDetail.respCode = "-1";
//                        tmpRetDetail.respInfo = tmpSbMsg.toString();
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "-1";
//                    tmpRetDetail.respInfo = tmpStrRet[1];
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } catch (Exception e) {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = e.getMessage();
//                retAts.writeDetail(tmpRetDetail);
//                e.printStackTrace();
//            }
//        }
//
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    @Override
//    public RetAtsB113ProtocolSubmit D_B113_ProtocolResp_Submit(ReqB113ProtocolSubmit query) throws Exception {
//        return null;
//    }
//
//    @Override
//    public RetAtsB119BillRelePledSubmit D_B119_BillResp_Submit(ReqB119BillRelePledSubmit query) throws Exception {
//        RetAtsB119BillRelePledSubmit retAts = new RetAtsB119BillRelePledSubmit(query.reqHeader);
//        retAts.writeBeforeDetail();
//        RetAtsB119BillRelePledSubmitDetail detail = new RetAtsB119BillRelePledSubmitDetail();
//        query.readRecord();
//        try {
//            bnkPackageID = query.reqHeader.transSeqID;
//            bnkTransCode = "BDISIMPAWN";
//            bnkfSeqno = bnkPackageID;
//            bnkVersion = "0.0.1.0";
//            XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//                writeCommonHeader(xmlWriter);
//            xmlWriter.writeElementString("TotalNum", "1");
//            xmlWriter.writeElementString("TotalAmt", StringHelper.amountMultiply100(query.detail.billAmt));
//            xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//            xmlWriter.writeStartElement("rd");
//            xmlWriter.writeElementString("iSeqno", query.detail.reqSeqID);
//            xmlWriter.writeElementString("BillNo", query.detail.billNo);
//            xmlWriter.writeElementString("BillOpener", query.detail.billOpenName);
//            xmlWriter.writeElementString("BillOpenAcct", query.detail.billOpenAcc);
//            xmlWriter.writeElementString("BillAmt",StringHelper.amountMultiply100(query.detail.billAmt));
//            xmlWriter.writeElementString("PawneeAcct", query.detail.actNum);
//            xmlWriter.writeElementString("Notes", query.detail.memo);
//            xmlWriter.writeElementString("IfMessage", "");
//            xmlWriter.writeElementString("MessagRange","" );
//            xmlWriter.writeElementString("PhoneNOList", "");
//            xmlWriter.writeEndDocument();
//                String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//            if (tmpStrRet[0].length() == 0) {
//                    StringBuilder tmpSbMsg = new StringBuilder();
//                    XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//                    if (tmpBkReader != null) {
//                        String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                        String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                        String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                        if (isActiveRetCode(tmpRetCode)) {
//                            if (tmpBkReader.read("/CMS/eb/out/rd")) {
//                                detail.respCode = "0";
//                                detail.respInfo = tmpRetMsg;
//                                detail.reqSeqID = tmpSerialNo;
//                                detail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//                                detail.payInfoCode = tmpRetCode;
//                            }
//                        } else {
//                            detail.respCode = "0";
//                            detail.respInfo = tmpBkReader.getSimpleText("RetMsg");
//                            detail.transState = tmpRetCode;
//                            detail.payInfoCode = tmpRetCode;
//                        }
//                    } else {
//                        detail.respCode = "-1";
//                        detail.respInfo = tmpSbMsg.toString();
//                    }
//                } else {
//                    detail.respCode = "-1";
//                    detail.respInfo = tmpStrRet[1];
//                }
//            } catch (Exception e) {
//               detail.respCode = "-1";
//               detail.respInfo = e.getMessage();
//                e.printStackTrace();
//            }
//        retAts.writeDetail(detail);
//        retAts.writeEnd();
//        return retAts;
//    }
//
//    /**
//     * ats → bank
//     * <p>
//     * 撤回操作,ats操作代码转bank交易代码
//     * 参考ats ReqB112Callback
//     *
//     * @param operateFlag
//     * @return
//     */
//    private String B112ConvertOperateFlag(String operateFlag) {
//        if (StringHelper.isNullOrEmpty(operateFlag)) return null;
//        int operateFlagValue = Integer.parseInt(operateFlag);
//        switch (operateFlagValue) {
//            //提示承兑撤回
//            case 1:
//                return null;
//            //提示收票撤回
//            case 2:
//                return "BCPCOL";
//            //背书转让撤回
//            case 3:
//                return "BCENDO";
//            //贴现撤回
//            case 4:
//                return "BCDISC";
//            //质押撤回
//            case 5:
//                return "WDBPLED";
//            //提示付款撤回
//            case 6:
//                return "BCPPAY";
//            //追索通知撤回
//            case 10:
//                return "WDBRECOU";
//            //同意清偿撤回
//            case 11:
//                return "RELBAST";
//            case 12:
//                return "RELWBPLE";
//        }
//        return null;
//    }
//
//    /**
//     * 质押撤回、追索通知撤回、同意清偿撤回时,使用高级票据操作接口发送报文
//     *
//     * @param bnkTransCode
//     * @param query
//     * @param retAts
//     * @throws Exception
//     */
//    private void sendOtherD_B112_BillResp_Submit(String bnkTransCode, ReqB112BillCancSubmit query, RetAtsB112BillCancSubmit retAts) throws Exception {
//        RetAtsB112BillCancSubmitDetail tmpRetDetail = new RetAtsB112BillCancSubmitDetail();
//
//        bnkPackageID = query.reqHeader.transSeqID;
//        this.bnkTransCode = bnkTransCode;
//        bnkfSeqno = bnkPackageID;
//        bnkVersion = "0.0.1.0";
//        XmlTextWriter xmlWriter = new XmlTextWriter();//发银行报文的XML对象
//        //写入ICBC02通用的头部节点
//        writeCommonHeader(xmlWriter);
//
//        xmlWriter.writeElementString("TotalNum", "1");
//        xmlWriter.writeElementString("TotalAmt", amountMultiply100(query.detail.billAmt));
//        xmlWriter.writeElementString("SignTime", Format.DateTime17Format.format(new Date()));
//
//        xmlWriter.writeStartElement("rd");
//        xmlWriter.writeElementString("iSeqno", query.detail.reqSeqID);
//        xmlWriter.writeElementString("BillNo", query.detail.billNo);
//        xmlWriter.writeElementString("BillSerialNo", query.detail.busiNo);
//        xmlWriter.writeElementString("BillOpener", query.detail.billOpenName);
//        xmlWriter.writeElementString("BillOpenAcct", query.detail.billOpenAcc);
//        xmlWriter.writeElementString("Account", query.detail.actNum);
//        xmlWriter.writeElementString("BillAmt", amountMultiply100(query.detail.billAmt));
//        xmlWriter.writeElementString("IfDateHintTicket", "");
//        xmlWriter.writeElementString("HintTicketDate", "");
//        xmlWriter.writeElementString("SignResult", "");
//        xmlWriter.writeElementString("IfDatePayHint", "");
//        xmlWriter.writeElementString("PayHintDate", "");
//        xmlWriter.writeElementString("DrwguarntrAddress", "");
//        xmlWriter.writeElementString("AccptrCreditLV", "");
//        xmlWriter.writeElementString("AccptrRateAgency", "");
//        xmlWriter.writeElementString("AccptrRateMaturity", "");
//        xmlWriter.writeElementString("Notes", "");
//        xmlWriter.writeElementString("ProtestReason", "");
//        xmlWriter.writeElementString("ProtestNotes", "");
//        if("WDBRECOU".equals(bnkTransCode)){
//            String fileDir = getBankConfig().getValueAsString("ByRecourse");
//            String[] receArr = new String[]{};
//            for(String file:new File(fileDir).list()){
//                if(file.contains(query.detail.billNo+"_"+query.detail.receAct)){
//                    receArr = file.split("_");
//                    break;
//                }
//            }
//            if(StringHelper.isNullOrEmpty(query.detail.receName)){
//                xmlWriter.writeElementString("ByResourcerName", receArr[2]);
//            }else {
//                xmlWriter.writeElementString("ByResourcerName", query.detail.receName);
//            }
//            xmlWriter.writeElementString("ByResourcerAcct", query.detail.receAct);
//            if(StringHelper.isNullOrEmpty(query.detail.receBnkCode)) {
//                xmlWriter.writeElementString("ByResourcerBank",receArr[3]);
//            }else{
//                xmlWriter.writeElementString("ByResourcerBank", query.detail.receBnkCode);
//            }
//        }else {
//            xmlWriter.writeElementString("ByResourcerName", query.detail.receName);
//            xmlWriter.writeElementString("ByResourcerAcct", query.detail.receAct);
//            xmlWriter.writeElementString("ByResourcerBank", query.detail.receBnkCode);
//        }
//
//        xmlWriter.writeElementString("IfMessage", "");
//        xmlWriter.writeElementString("MessagRange", "");
//        xmlWriter.writeElementString("PhoneNOList", "");
//        xmlWriter.writeEndElement();
//
//        xmlWriter.writeEndDocument();
//        String[] tmpStrRet = sendToBank(xmlWriter.toXmlString(), true);
//        if (tmpStrRet[0].length() == 0) {
//            StringBuilder tmpSbMsg = new StringBuilder();
//            XmlTextReader tmpBkReader = loadBankRespXmlReader(tmpStrRet[1], tmpSbMsg);
//            if (tmpBkReader != null) {
//                String tmpRetCode = tmpBkReader.getFirstText("/CMS/eb/pub/RetCode");
//                String tmpSerialNo = tmpBkReader.getFirstText("/CMS/eb/pub/SerialNo");
//                String tmpRetMsg = tmpBkReader.getFirstText("/CMS/eb/pub/RetMsg");
//                if (isActiveRetCode(tmpRetCode)) {
//                    while (tmpBkReader.read("/CMS/eb/out/rd")) {
//                        setOtherRetAtsB112BillCancSubmitDetail(query, tmpRetDetail, tmpBkReader, tmpSerialNo);
//                        retAts.writeDetail(tmpRetDetail);
//                    }
//                } else {
//                    tmpRetDetail.respCode = "0";
//                    tmpRetDetail.respInfo = tmpRetMsg;
//                    tmpRetDetail.transState = tmpRetCode;
//                    tmpRetDetail.payInfoCode = tmpRetCode;
//                    retAts.writeDetail(tmpRetDetail);
//                }
//            } else {
//                tmpRetDetail.respCode = "-1";
//                tmpRetDetail.respInfo = tmpSbMsg.toString();
//                retAts.writeDetail(tmpRetDetail);
//            }
//        } else {
//            tmpRetDetail.respCode = "-1";
//            tmpRetDetail.respInfo = tmpStrRet[1];
//            retAts.writeDetail(tmpRetDetail);
//        }
//    }
//
//    private void setRetAtsB112BillCancSubmitDetail(ReqB112BillCancSubmit query,
//                                                   RetAtsB112BillCancSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                   String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    /**
//     * 质押撤回、追索通知撤回、同意清偿撤回时，返回高级票据操作接口返回报文
//     *
//     * @param query
//     * @param tmpRetDetail
//     * @param tmpBkReader
//     * @throws Exception
//     */
//    private void setOtherRetAtsB112BillCancSubmitDetail(ReqB112BillCancSubmit query,
//                                                        RetAtsB112BillCancSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                        String serialNo) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = tmpBkReader.readedXElement.getSingleText("iRetMsg");
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = tmpBkReader.readedXElement.getSingleText("iRetCode");
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    /**
//     * ats → bank
//     * ats : discType 贴现种类 1-买断式 2-回购式
//     * bank : RM00-买断式 RM01-回购式
//     *
//     * @param discType
//     * @return
//     */
//    private String discType2TranType(String discType) {
//        if (discType == null) return null;
//        if (discType.equals("1")) {
//            return "RM00";
//        }
//        if (discType.equals("2")) {
//            return "RM01";
//        }
//        return null;
//    }
//
//    /**
//     * ats → bank
//     * ats : payType 清算标识 1-线上清算 2-线下清算
//     * bank : SM00-线上清算 SM01-线下清算
//     * 当对手账号为工行时，只支持线下清算；当对手为他行时，支持线上和线下清算
//     *
//     * @param payType
//     * @return
//     */
//    private String payType2OnlineFlag(String payType) {
//        if (payType == null) return null;
//        if (payType.equals("1")) {
//            return "SM00";
//        }
//        if (payType.equals("2")) {
//            return "SM01";
//        }
//        return null;
//    }
//
//    private void setRetAtsB106BillDiscSubmitDetail(ReqB106BillDiscSubmit query,
//                                                   RetAtsB106BillDiscSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader,
//                                                   String serialNo, String retCode, String retMsg) throws Exception {
//        tmpRetDetail.respCode = "0";
//        tmpRetDetail.respInfo = retMsg;
//        tmpRetDetail.reqSeqID = serialNo;
//        tmpRetDetail.payInfoCode = retCode;
//        tmpRetDetail.transState = tmpBkReader.readedXElement.getSingleText("Result");
//    }
//
//    private void setRetAtsB102BillAccpSubmitDetail(ReqB102BillAccpSubmit query, RetAtsB102BillAccpSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader) throws Exception {
//
//    }
//
//    private void setRetAtsB109BillGuarSubmitDetail(ReqB109BillGuarSubmit query, RetAtsB109BillGuarSubmitDetail tmpRetDetail, XmlTextReader tmpBkReader) throws Exception {
//
//    }
//}
